﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Xml;

namespace OreSystem.Common
{
    public class AppConfigTool
    {
        public static string GetConnectionStringsConfig(string connectionName)
        {
            string connectionString =
                    ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();
            Console.WriteLine(connectionString);
            return connectionString;
        }
        /// <summary>
        /// 更新连接字符串
        /// </summary>
        /// <param name="newName"> 连接字符串名称 </param>
        /// <param name="newConString"> 连接字符串内容 </param>
        /// <param name="newProviderName"> 数据提供程序名称 </param>
        public static void UpdateConnectionStringsConfig(string newName,
            string newConString,
            string newProviderName)
        {
            bool isModified = false;    // 记录该连接串是否已经存在
            // 如果要更改的连接串已经存在
            if (ConfigurationManager.ConnectionStrings[newName] != null)
            {
                isModified = true;
            }
            // 新建一个连接字符串实例
            ConnectionStringSettings mySettings =
                new ConnectionStringSettings(newName, newConString, newProviderName);
            // 打开可执行的配置文件*.exe.config
            Configuration config =
                ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            // 如果连接串已存在，首先删除它
            if (isModified)
            {
                config.ConnectionStrings.ConnectionStrings.Remove(newName);
            }
            // 将新的连接串添加到配置文件中.
            config.ConnectionStrings.ConnectionStrings.Add(mySettings);
            // 保存对配置文件所作的更改
            config.Save(ConfigurationSaveMode.Modified);
            // 强制重新载入配置文件的ConnectionStrings配置节
            ConfigurationManager.RefreshSection("ConnectionStrings");
        }
        public static void UpdateAppConfig(string key,string value,string newProviderName)
        {
            //--修改App.config文件
            XmlDocument xDoc = new XmlDocument();
            //获取可执行文件的路径和名称
            xDoc.Load(System.Windows.Forms.Application.ExecutablePath + ".config");

            XmlNode xNode;
            XmlElement xElem1;
            XmlElement xElem2;
            xNode = xDoc.SelectSingleNode("//connectionStrings");

            xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@name='" + key + "']");
            if (xElem1 != null) xElem1.SetAttribute("connectionString", value);
            else
            {
                xElem2 = xDoc.CreateElement("add");
                xElem2.SetAttribute("key", key);
                xElem2.SetAttribute("value", value);
                xNode.AppendChild(xElem2);
            }
            xDoc.Save(System.Windows.Forms.Application.ExecutablePath + ".config");
        }
        /// <summary>
        /// 修改nh配置文件
        /// </summary>
        /// <param name="connStr"></param>
        /// <param name="configFilePath"></param>
        public static void SetNHConfig(string connStr, string configFilePath)
        {
            XmlDocument xmldoc = new XmlDocument();
            XmlNamespaceManager manager = new XmlNamespaceManager(xmldoc.NameTable);
            manager.AddNamespace("ab", "urn:nhibernate-configuration-2.2");
            xmldoc.Load(configFilePath);
            XmlNode node = xmldoc.SelectNodes("/ab:hibernate-configuration/ab:session-factory/ab:property[@name='connection.connection_string']", manager)[0];
            node.InnerText = connStr;
            xmldoc.Save(configFilePath);
        }
    }
}
